using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Service.Data;
using Sinacor.Infra.Service.Security.Authorization;
using System.Data.Common;
using System.Data;
using Sinacor.Servicos.Comum.Util.SGBD;
using Sinacor.Servico.Bovespa.BovespaBase.Util;
using Sinacor.Servico.Bovespa.Ordens;
using Sinacor.Infra.Service.Common;

namespace Sinacor.Servico.Bovespa.Ordens.ResourceAccess
{
    public class Mensagem : BaseResourceAccess
    {
        public Mensagem()
            : base(AuthorizationContext.Current.CompanyId) 
        {}

        /// <summary>
        /// Historico:
        /// Data : 20/12/2007
        /// Autor: Ludmilla Modesto 
        /// Obs.: Criado. Retorna as mensagens de Justificativa e observacao
        /// </summary>
        /// <returns></returns>
        public List<BusinessEntity.Mensagem> ConsultarMensagensJustificativaObservacao()
        {
            List<BusinessEntity.Mensagem> response = new List<BusinessEntity.Mensagem>();
            DbCommand dbCommand;
            BusinessEntity.Mensagem beMensagem;

            StringBuilder sqlComando = new StringBuilder("SELECT ");
            sqlComando.AppendLine("ds_mensagem,cd_mensagem ");
            sqlComando.AppendLine("from TGEMENSAGEM ");
            sqlComando.AppendLine("where cd_sistema = 'ORD' ");
            sqlComando.AppendLine("order by cd_mensagem ");

            dbCommand = this.DataBase.GetSqlStringCommand(sqlComando.ToString());
            IDataReader dtReaderOrdem = this.DataBase.ExecuteReader(dbCommand);

            while (dtReaderOrdem.Read())
            {
                beMensagem = new BusinessEntity.Mensagem();

                //Codigo 
                beMensagem.Codigo = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorInt32(dtReaderOrdem[BusinessEntity.Mensagem.ConsultarMensagemJustificativa.Codigo]);
                //Descricao 
                beMensagem.Descricao = Sinacor.Servicos.Comum.Util.SGBD.Funcoes.BDValorString(dtReaderOrdem[BusinessEntity.Mensagem.ConsultarMensagemJustificativa.Descricao]);

                response.Add(beMensagem);
            }

            dtReaderOrdem.Close(); //incluido - esertorio - 200804291051 - ref issue ID0003836

            return response;
        }

        /// <summary>
        /// Executar o comando abaixo:
        /// 
        /// SELECT  <font color="#0000ff">Codigo</font>,
        ///  <font color="#0000ff">Descricao</font>
        ///  
        ///  <font color="#008000">/font>
        /// 
        /// </summary>
        /// <param name="parameter"></param>
        public List<BusinessEntity.Mensagem> ConsultarMensagensJustificativaObservacao(BusinessEntity.Parameter.FiltroMensagemJustificativaObservacao parameter)
        {
            List<BusinessEntity.Mensagem> response = new List<BusinessEntity.Mensagem>();
          
            StringBuilder sqlComando = new StringBuilder("SELECT CD_MENSAGEM Codigo, DS_MENSAGEM Descricao ");
            sqlComando.AppendLine(" FROM TGEMENSAGEM ");
            sqlComando.AppendLine(" WHERE CD_SISTEMA = :TipoSistema ");
            sqlComando.AppendLine(" ORDER BY DS_MENSAGEM ");

            using (DbCommand command = this.DataBase.GetSqlStringCommand(sqlComando.ToString()))
            {
                this.DataBase.AddInParameter(command, ":TipoSistema", DbType.String, EnumConverter.ToString<BusinessEntity.Enum.TipoSistema>(parameter.TipoSistema));                

                response = FindAll<BusinessEntity.Mensagem>(command, reader =>
                    {
                        BusinessEntity.Mensagem item = new Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Mensagem();

                        item.Codigo = reader.GetValue<Int32>("Codigo");
                        item.Descricao = reader.GetValue<String>("Descricao");

                        return item;
                    }
                );
            }

            return response;
        }
    }
}
